#pragma once

#include <netinet/in.h>
#include"net_connection.h"
#include"event_loop.h"
#include"message.h"


class udp_client : public net_connection{

public:
    // 构造函数
    udp_client(event_loop* loop, const char* ip, uint16_t port);

    // 重写发送数据的函数
    virtual int send_message(const char *data, int msglen, int msgid);

    // 注册一个msgid和回调函数的路由关系
    void add_msg_router(int msgid, msg_callback* cb, void* args=NULL);

    // 处理读业务
    void do_read();

    ~udp_client();

    // 提供一个获取当前fd的函数
    virtual int get_fd(){
        return _sockfd;
    }

private:

    int _sockfd;

    event_loop* _loop;

    // 路由分发机制
    msg_router _router;

    // 服务器地址
    struct sockaddr_in _server_addr;
    socklen_t _addrlen;

    // 读写缓存
    char _read_buf[MESSAGE_LENGTH_LIMIT];
    char _write_buf[MESSAGE_LENGTH_LIMIT];

};